package com.heihei.serviceimpl.tas;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.heihei.common.page.Condition;
import com.heihei.common.page.Query;
import com.heihei.common.response.ResponseVO;
import com.heihei.entity.tas.TasDailyTaskTypeEntity;
import com.heihei.enums.DeleteFlagEnum;
import com.heihei.mapper.tas.TasDailyTaskTypeMapper;
import com.heihei.service.tas.TasDailyTaskTypeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author duanhf
 * @since 2021-12-20
 */
@Service
public class TasDailyTaskTypeServiceImpl extends ServiceImpl<TasDailyTaskTypeMapper, TasDailyTaskTypeEntity> implements TasDailyTaskTypeService {

    /**
     * 添加
     *
     * @author duanhf
     * 2021年12月20日 17:49:51
     */
    @Override
    public ResponseVO<String> add(TasDailyTaskTypeEntity paramEntity) {
        paramEntity.setId(null);
        if(StringUtils.isEmpty(paramEntity.getTypeName())) {
            return ResponseVO.paramLess("类型名称不能为空");
        }
        boolean flag = this.save(paramEntity);
        if(!flag) {
            return ResponseVO.dealException("添加可能未成功");
        }
        return ResponseVO.dealSuccess(paramEntity.getId());
    }

    /**
     * 修改
     *
     * @author duanhf
     * 2021年12月20日 17:51:58
     */
    @Override
    public ResponseVO<Boolean> myUpdateById(TasDailyTaskTypeEntity paramEntity) {
        if(StringUtils.isEmpty(paramEntity.getId())) {
            return ResponseVO.paramLess("修改时，主键ID不能为空");
        }
        //已删除的记录不允许修改
        TasDailyTaskTypeEntity currDbEntity = this.getById(paramEntity.getId());
        if(Objects.isNull(currDbEntity)) {
            return ResponseVO.paramIllegal("修改失败，该记录可能不存在");
        }
        if(DeleteFlagEnum.DELETED.getKey().equals(paramEntity.getDelFlag())) {
            return ResponseVO.paramIllegal("修改失败，该记录可能已被删除");
        }
        //不允许手动修改公共字段
        paramEntity.removeAllPublicField();
        boolean flag = this.updateById(paramEntity);
        if(!flag) {
            return ResponseVO.paramIllegal("修改失败，该记录可能不存在");
        }
        return ResponseVO.dealSuccess(true);
    }

    /**
     * 删除
     *
     * @author duanhf
     * 2021年12月20日 17:58:28
     */
    @Override
    public ResponseVO<Boolean> deleteByIdLogic(String id) {
        if(StringUtils.isEmpty(id)) {
            return ResponseVO.paramLess("请传入要删除的主键ID");
        }
        TasDailyTaskTypeEntity entity = new TasDailyTaskTypeEntity();
        entity.setId(id);
        entity.setDelFlag(DeleteFlagEnum.DELETED.getKey());
        boolean flag = this.updateById(entity);
        if(!flag) {
            return ResponseVO.paramIllegal("该记录可能不存在");
        }
        return ResponseVO.dealSuccess(true);
    }

    /**
     * 批量删除
     *
     * @author duanhf
     * 2021年12月20日 18:36:19
     */
    @Override
    public ResponseVO<Boolean> deleteBatch(List<String> idList) {
        if(CollectionUtils.isEmpty(idList)) {
            return ResponseVO.paramLess("请传入要删除的ID");
        }
        List<TasDailyTaskTypeEntity> entityList = idList.stream().map(id -> {
            TasDailyTaskTypeEntity ent = new TasDailyTaskTypeEntity();
            ent.setId(id);
            ent.setDelFlag(DeleteFlagEnum.DELETED.getKey());
            return ent;
        }).collect(Collectors.toList());
        boolean flag = this.updateBatchById(entityList);
        if(!flag) {
            return ResponseVO.paramIllegal("该记录可能不存在");
        }
        return ResponseVO.dealSuccess(true);
    }

    /**
     * 列表查询
     *
     * @author duanhf
     * 2021年12月21日 15:45:49
     */
    @Override
    public ResponseVO<IPage<TasDailyTaskTypeEntity>> myPageList(TasDailyTaskTypeEntity entityParam, Query query) {
        LambdaQueryWrapper<TasDailyTaskTypeEntity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(TasDailyTaskTypeEntity::getDelFlag, DeleteFlagEnum.NOT_DELETED.getKey());
        if(StringUtils.isNotEmpty(entityParam.getTypeName())) {
            queryWrapper.like(TasDailyTaskTypeEntity::getTypeName, entityParam.getTypeName());
        }
        IPage<TasDailyTaskTypeEntity> pageList = this.page(Condition.getPage(query), queryWrapper);
        return ResponseVO.dealSuccess(pageList);
    }

    /**
     * 详情
     *
     * @author duanhf
     * 2021年12月21日 15:48:35
     */
    @Override
    public ResponseVO<TasDailyTaskTypeEntity> myGetById(String id) {
        if(StringUtils.isEmpty(id)) {
            return ResponseVO.paramLess("请传入主键ID");
        }
        TasDailyTaskTypeEntity currDbEntity = this.getById(id);
        if(Objects.isNull(currDbEntity)) {
            return ResponseVO.paramIllegal("该记录可能不存在");
        }
        if(DeleteFlagEnum.DELETED.getKey().equals(currDbEntity.getDelFlag())) {
            return ResponseVO.paramIllegal("该记录可能已被删除");
        }
        return ResponseVO.dealSuccess(currDbEntity);
    }
}
